<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

	/**
	 * стартуем сессию
	 *
	 * @return void
	 */
	protected function _initSession() {
		return Zend_Session::isStarted() ? Zend_Session : Zend_Session::start();
	}

	/**
	 * Инициализируем autoloader
	 *
	 * @return Zend_Loader_Autoloader
	 */
	protected function _initAutoload() {
		$this->bootstrap('frontController');
		$autoLoader = Zend_Loader_Autoloader::getInstance();
		$autoLoader->registerNamespace('Gb_');
		return $autoLoader;
	}

	/**
	 * Инициируем Представление
	 *
	 * @return Zend_View
	 */
	protected function _initView() {
		// Инициализация Zend_Layout
		Zend_Layout::startMvc();
		$layout = Zend_Layout::getMvcInstance();

		// инициализация вида
		$view = $layout->getView();

		// Настройка расширения view скриптов с помощью Action помошников
		$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();

		Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

		// Задаем путь к помощникам вида
		$view->addHelperPath(APPLICATION_PATH . '/views/helpers', 'Gb_View_Helper');

		// Устанавливаем Description и Keywords
		$view->headMeta()->appendName('description', 'Fishfm fishing portal');
		$view->headMeta()->appendName('keywords', 'Fishfm fishing portal');
		
		// Устанавливаем параметры http протокола
		$view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8');
		$view->headMeta()->appendHttpEquiv('Content-Language', 'en-US');

		// Добавляем css файлы
		$view->headLink()->appendStylesheet('/css/main.css');

		// Добавляем js файлы
		$view->headScript()
				->appendFile('/js/ieBugsFix/IE7.js', null, array('conditional' => 'lt IE 7'))
				->appendFile('/js/ieBugsFix/IE8.js', null, array('conditional' => 'lt IE 8'))
				->appendFile('/js/jquery/jquery-1.3.2.min.js');

		// Устанавливаем заголовок html документа и разделитель для него
		$view->headTitle('Title')
				->setSeparator(' | ');

		return $view;
	}

	/**
	 * Добавляем адаптер БД в реестр
	 *
	 * @return void
	 */
	protected function _initDbase() {
		$dbAdapter = $this->bootstrap('db')->getResource('db');
		$registry = Zend_Registry::getInstance();
		$registry->set('db', $dbAdapter);
	}

	/**
	 * настраиваем ACL
	 *
	 * @return void
	 */
	protected function _initACL() {
		$db = Zend_Registry::get('db');

		$acl = new Zend_Acl();

		// Добавляем роли в список
		$sql = 'SELECT par.name AS role, rol.name AS parent
			FROM acl_roles AS rol
			RIGHT JOIN acl_roles AS par ON par.idp = rol.id';
		$roles = $db->fetchAll($sql);
		foreach ($roles as $role) {
			$acl->addRole(new Zend_Acl_Role($role['role']), $role['parent']);
		}

		// Добавляем ресурсы в список
		$sql = 'SELECT res.name AS resource
			FROM acl_resources AS res';
		$resources = $db->fetchAll($sql);
		foreach ($resources as $resource) {
			$acl->addResource($resource['resource']);
		}

		// Определяем доступ ролей к ресурсам
		$sql = 'SELECT rol.name AS role, res.name AS resource, acc.access
			FROM acl_access AS acc
			LEFT JOIN acl_roles AS rol ON role = rol.id
			LEFT JOIN acl_resources AS res ON resource = res.id';
		$accesses = $db->fetchAll($sql);
		foreach ($accesses as $access) {
			switch ($access['access']) {
				case 'allow' : $acl->allow($access['role'], $access['resource']);
					break;
				case 'deny' : $acl->deny($access['role'], $access['resource']);
					break;
			}
		}

		// добавляем ACL в реестр
		$registry = Zend_Registry::getInstance();
		$registry->set('acl', $acl);

		return $acl;
	}

	/**
	 * Инициализация маршрутов
	 *
	 * @return void
	 */
//	protected function _initRouter() {
//		$router = $this->frontController->getRouter();
//	}

	/**
	 * Инициализация контроллера
	 *
	 * @return void
	 */
	protected function _initControllers() {
		$this->frontController->registerPlugin(new Gb_Controller_Plugin_FlashMessenger());
		$this->frontController->registerPlugin(new Gb_Controller_Plugin_UserAuth());
		Zend_Controller_Action_HelperBroker::addPrefix('Gb_Controller_Action_Helper');
	}
	
//	/**
//	 * Инициализация логера
//	 *
//	 * @return void
//	 */
//	protected function _initLog() {
//		$logger = new Zend_Log();
//		$writer = new Zend_Log_Writer_Firebug();
//		$logger->addWriter($writer);
//	}



}